export {}

// 由于两个类有公共的能力，可以用接口来约束
// 一个接口只约束一个能力，一个类型同时实现多个接口
interface Eat {
  // 使用函数签名的方式约束方法的类型
  eat(food: string): void
}
interface Run {
  // 使用函数签名的方式约束方法的类型
  run(distance: number): void
}

// 使用 implements 实现接口，在类型中必须有对应的成员，否则报错
class Person implements Eat, Run {
  eat(food: string): void {
    console.log(`吃${food}吃的美滋滋`)
  }
  run(distance: number): void {
    console.log(`跑起来: ${distance}`)
  }
}

// animal 同理
class Animal implements Eat, Run {
  eat(food: string): void {
    console.log(`吃${food}吃的狼吞虎咽`)
  }
  run(distance: number): void {
    console.log(`飞起来: ${distance}`)
  }
}